package ru.niir.goodfil.db.dic;

import ru.niir.goodfil.utils.Pair;

import java.util.ArrayList;
import java.util.List;

/**
 * Статусы заказов.
 * Статус заказа показывает на каком этапе обработки находится данный заказ
 */
public final class OrderState {
    /**
     * Предварительно сохранен
     */
    public static final int PRE_SAVED = 1;

    /**
     * Ожидание поставки
     */
    public static final int AWAITING_GOODS = 2;

    /**
     * Заказ принят
     */
    public static final int SAVED = 3;

    /**
     * На согласовании у менеджера
     */
    public static final int AWAITING_VALIDATION = 4;

    /**
     * Согласнован менеджером
     */
    public static final int VALIDATED = 5;

    /**
     * Заказ принят бухгалтерией
     */
    public static final int ACCEPTED_BY_BUH = 6;

    /**
     * Заказ оплачен
     */
    public static final int PAYED = 7;

    /**
     * На выдаче со склада
     */
    public static final int OUTPUT = 8;

    /**
     * Склад: отгрузка
     */
    public static final int DELIVERY = 9;

    /**
     * Ожидание отгрузки
     */
    public static final int AWAITING_DELIVERY = 13;

    /**
     * Получен клиентом
     */
    public static final int BACK = 10;

    /**
     * Обработка завершена
     */
    public static final int COMPLETE = 11;

    /**
     * Не согласован менеджером
     */
    public static final int NOT_VALIDATED = 12;

    /**
     * Принят в обработку складом
     */
    public static final int ACCEPTED_BY_STORAGE = 14;

    public static String asString(int value) {
        switch (value) {
            case OrderState.ACCEPTED_BY_BUH:
                return "Заказ принят бухгалтерией";
            case OrderState.AWAITING_GOODS:
                return "Ожидание поставки";
            case OrderState.AWAITING_VALIDATION:
                return "Резерв";
            case OrderState.BACK:
                return "Получен клиентом";
            case OrderState.COMPLETE:
                return "Обработка завершена";
            case OrderState.DELIVERY:
                return "На складе: отгрузка";
            case OrderState.AWAITING_DELIVERY:
                return "На складе: ожидание отгрузки";
            case OrderState.NOT_VALIDATED:
                return "Не согласован менеджером";
            case OrderState.OUTPUT:
                return "На складе: сборка";
            case OrderState.PAYED:
                return "Заказ оплачен";
            case OrderState.PRE_SAVED:
                return "Предварительно сохранен";
            case OrderState.SAVED:
                return "Сохранен";
            case OrderState.VALIDATED:
                return "Согласнован менеджером";
            case OrderState.ACCEPTED_BY_STORAGE:
                return "Принят в обработку складом";
        }
        return "";
    }

    private static Pair getPair(int value) {
        return new Pair(value, asString(value));
    }

    public static List<Pair> list() {
        return new ArrayList<Pair>() {{
            add(getPair(OrderState.ACCEPTED_BY_BUH));
            add(getPair(OrderState.AWAITING_GOODS));
            add(getPair(OrderState.AWAITING_VALIDATION));
            add(getPair(OrderState.BACK));
            add(getPair(OrderState.COMPLETE));
            add(getPair(OrderState.DELIVERY));
            add(getPair(OrderState.NOT_VALIDATED));
            add(getPair(OrderState.OUTPUT));
            add(getPair(OrderState.PAYED));
            add(getPair(OrderState.PRE_SAVED));
            add(getPair(OrderState.SAVED));
            add(getPair(OrderState.VALIDATED));
            add(getPair(OrderState.ACCEPTED_BY_STORAGE));
        }};
    }
}
